//
//  ViewController.swift
//  demo1
//
//  Created by 马骁 on 17/7/19.
//  Copyright © 2017年 MX. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let rect = CGRect(x: 0, y: 0, width: 160, height: 160)
        let iv = UIImageView(frame: rect)
        iv.center = view.center
        view.addSubview(iv)
        
        //设置图像
        // - PNG 图片支持透明的
//        let image = #imageLiteral(resourceName: "avatar_default_big.png")
        
        // - JPG 图片不支持透明
        let image = #imageLiteral(resourceName: "avatar.jpg")
        iv.image = stretchImage(image: image, size: rect.size, backgroundColor: view.backgroundColor)
    }
    
    /// 拉伸image
    ///
    /// - Parameters:
    ///   - image: image
    ///   - size: size
    ///   - backgroundColor: backgroundColor
    /// - Returns: UIImage
    func stretchImage(image: UIImage, size: CGSize, backgroundColor: UIColor?) -> UIImage? {
        
        let rect = CGRect(origin: CGPoint(), size: size)
        
        // 1.图像的上下文 - 内存中开辟一个地址，跟屏幕无关
        /**
         UIGraphicsBeginImageContextWithOptions(<#T##size: CGSize##CGSize#>, <#T##opaque: Bool##Bool#>, <#T##scale: CGFloat##CGFloat#>)
         size: 绘制的尺寸
         opaque: false 透明 、true 不透明
         scale: 屏幕分辨率，默认1.0，图像质量不好，可以指定0，会选择当前设备的屏幕分辨率
         */
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
        
        // 2.背景填充
        backgroundColor?.setFill()
        UIRectFill(rect)
        
        // 3.实例化一个圆形的路径
        let path = UIBezierPath(ovalIn: rect)
        //   进行路径裁剪 - 后续的绘图，都会出现在圆形路径内部，外部的全部干掉
        path.addClip()
        
        // 4.绘图 drawInRect 就是在指定区域内拉伸屏幕
        image.draw(in: rect)
        
        // 5.绘制内切的圆形
        UIColor.darkGray.setStroke()
        path.lineWidth = 3
        path.stroke()
        
        // 6.取得结果
        let resultImage = UIGraphicsGetImageFromCurrentImageContext()
        
        // 7.关闭上下文
        UIGraphicsEndImageContext()
        
        return resultImage
    }

}

